在一個複雜的系統中,告警事件的歷史紀錄是非常重要的。它不僅可以幫助我們了解系統的穩定性,還可以幫助我們找出系統的瓶頸和潛在的問題。Grafana Alerting 不斷持續著他們在告警事件管理的管理體驗,透過「告警列表」和「告警歷史」頁面,讓使用者可以更方便的檢視告警事件的歷史紀錄與脈絡。
告警規則列表頁提供了一個集中的視圖,列出所有現有的告警規則。預設情況下,這些告警規則會依據類型進行分組,分為由 Grafana-managed 和 Datasource-managed(Mimir/Cortex/Loki)的規則。值得注意的是,Grafana 區域中還包含了 Prometheus 兼容資料源的告警規則,這已經對我們分散在各地的 Prometheus 告警規則進行了十分便利的整合。
Note: 雖然我們可以查看這些 Prometheus 兼容的告警規則,但無法直接在這裡編輯它們。
當我們需要管理大量的告警時,可以利用告警規則列表頁的強大搜尋功能,透過資料夾、評估組(Evaluation Groups)、規則名稱等條件進行過濾。此外還可以根據規則的屬性進行篩選,例如標籤、狀態、類型和健康狀況,以更快找到你所關注的告警規則。
在告警規則列表頁中,你可以對現有的規則進行多種操作,包括複製規則、靜默通知,以及暫停或恢復規則的評估。如果選擇暫停評估,對應的告警規則狀態將顯示為「Paused」。這一頁面為集中化管理和操作告警規則提供了便利,讓你可以輕鬆地維護和調整系統的監控狀態。
最後,我們還能夠將我們在 Grafana 操作介面中,建立出的 Alerting 規則,匯出成 JSON/YAML/Terraform 格式,方便我們在不同的 Grafana 實例之間進行遷移,實現我們的告警規則 as Code 以及 GitOps 的理想。
除了告警規則列表頁,Grafana 還提供了 Alert List Panel,讓你可以在自訂的 Dashboard 中建立一個專屬的告警列表。透過 Alert List Panel,你可以將所有告警規則集中展示在一個 Dashboard 中,不僅可以顯示當前的告警列表,還能對告警事件進行統計和分析。
在 Alert List Panel 中,你可以自由設置過濾條件,例如依據告警狀態、標籤、資料夾等進行篩選,從而專注於你關注的特定告警。除此之外,你還可以透過這個面板呈現告警的統計數據,像是不同狀態(觸發中、正常、暫停)的告警數量,以及不同服務或應用的告警分佈情況。
利用 Alert List Panel,可以打造一個即時監控的告警總覽 Dashboard,增強告警管理的可視化效果吧。
Grafana 在 2024/7/26 在 Grafana Cloud 發布了一個集中化的告警歷史頁面,用於查看所有由 Grafana 管理的告警規則所產生的告警事件。這個頁面可以幫助你在不同時間點觀察告警的模式、趨勢,甚至預測未來可能發生的問題。此外,透過檢視告警事件的歷史紀錄,你還可以排查那些頻繁觸發的告警,找出可能存在的異常。
這對於開源社群的告警規則歷史持久化來說,是一個十分重要的功能。因為我們通常告警事件在通知道目的地後就會被丟棄,如果沒有將通知訊息持久化,我們就很難去檢視過去發生的告警事件,以及它們的狀態變化。如果要持久化將會帶來額外持久化資料庫的管理負擔,不過 Grafana 利用和 Loki 的原生整合,讓我們可以輕鬆的將告警事件持久化,並且在告警歷史頁面上進行檢視。
在我一開始注意到這個功能時,我就意識到這是一個能夠解決許多人痛點的功能,於是開始通靈了各種設定,想要看看能不能夠在 Grafana OSS 實例上啟用。但研究了好久設定,也確認了版本是最新的 Grafana v11.1.14 後,發現還是沒有辦法啟用這個功能。於是突發奇想在 Slack 上 Tag 了這項 EPIC 的負責人,詢問是否能夠在 Grafana OSS 實例上啟用這個功能,結果還真的在當天就得到了回覆。
原來是這項功能新到還沒有在當前最新版本的 Grafana OSS 啟用(即使已經發布了一個月)。不過在我寫這篇文章的當下我們已經可以在 Grafana v11.2.0 版本中啟用這個功能了!
每當告警實例在一段時間內發生狀態變化時,都會在告警歷史頁面上顯示一個新的告警事件。值得注意的是,無論是否設置了靜默(Silences)或靜音時間(Mute Timings),所有的告警事件都會完整記錄並顯示在這個頁面上。因此,即使你沒有收到相關的通知,也可以在這裡看到完整的告警數據歷史,方便進行全盤分析並且進行告警事件的回溯。
啟動統一告警歷史頁面,我們需要分別開啟「Alert State History」和「alertingCentralAlertHistory」相關設定:
[unified_alerting.state_history]
enabled = true
backend = "loki"
loki_remote_url = "http://localhost:3100"
[feature_toggles]
enable = alertStateHistoryLokiSecondary, alertStateHistoryLokiPrimary, alertStateHistoryLokiOnly, alertingCentralAlertHistory
我們可以注意到在每個告警規則上的 Show state history 的實現方式就是將告警事件不斷的存入 Loki 中進行持久化,並且在告警歷史頁面上進行檢視。而統一告警歷史頁面則是將所有告警規則的告警事件集中存入 Loki 中,並且在告警歷史頁面上進行檢視。
到此,我們已經可以體會到 Grafana 在告警事件管理上的耕耘,不僅在告警規則的設定介面上提供了更為直覺的操作方式,還在告警歷史頁面上提供了更為豐富的資訊檢視,幫助我們更好地理解和分析系統的穩定性。Grafana 從一個單一入口查詢介面到貫徹可觀測性領域的決心,讓我們在可觀測性實踐上有了更為豐富的體驗。